<cfcomponent output="false" extends="mof.Core">

	<cffunction name="init" access="public" output="false" returntype="mof.Core">
		<cfset this.reloadFramework()>
		<cfreturn this />
	</cffunction>
	
	

	<!--- 
	#############################################################################
	INITIALIZATION METHODS
	#############################################################################--->

	
	<cffunction name="runFramework" access="public" output="true" returntype="void">
		<cfset super.runFramework() />
		<cfreturn />
	</cffunction>
	
	<cffunction name="reloadFramework" access="public" output="false" returntype="void">
		<cfset super.reloadFramework() />		
	</cffunction>
	
	<cffunction name="loadFramework" access="public" output="false" returntype="void">
		<cfset super.loadFramework() />
	</cffunction>

	<cffunction name="getConfigFileModifiedDate" access="public" output="false" returntype="date">
		<cfreturn super.getConfigFileModifiedDate() />
	</cffunction>

	<cffunction name="setAppKey" access="public" output="false" returntype="void">
		<cfset super.setAppKey() />
		<cfreturn />
	</cffunction>
	
	<cffunction name="getAppKey" access="public" output="false" returntype="string">
		<cfreturn super.getAppKey() />
	</cffunction>

	<cffunction name="loadProperties" access="public" output="false" returntype="void">
		<cfset super.loadProperties() />
	</cffunction>
	
	<cffunction name="setProperty" access="public" output="false" returntype="void">
		<cfargument name="name" type="string" required="true" />
		<cfargument name="value" type="any" required="true" />
		<cfset super.setProperty(argumentCollection=arguments) />	
		<cfreturn />
	</cffunction>
	
	<cffunction name="getProperty" access="public" output="false" returntype="any">
		<cfargument name="name" type="string" required="true" />
		<cfreturn super.getProperty(argumentCollection=arguments) />
	</cffunction>
	
	<cffunction name="getProperties" access="public" output="false" returntype="struct">
		<cfreturn super.getProperties() />
	</cffunction>
		
	<cffunction name="loadPlugins" access="public" output="false" returntype="void">
		<cfset super.loadPlugins() />
		<cfreturn />
	</cffunction>
	
	<cffunction name="getPlugins" access="public" output="false" returntype="array">
		<cfreturn super.getPlugins() />	
	</cffunction>

	<cffunction name="loadServiceFactory" access="public" output="false" returntype="void">
		<cfset super.loadServiceFactory() />
		<cfreturn />
	</cffunction>
	
	<!--- 
	#############################################################################
	REQUEST LEVEL METHODS
	#############################################################################--->	
	<cffunction name="parseUrl" access="public" output="false" returntype="void">
		<cfset super.parseUrl() />
		<cfreturn />
	</cffunction>
	
	<cffunction name="runMof" access="public" output="true" returntype="void">
		<cfset super.runMof() />	
		<cfreturn />
	</cffunction>	
	
	
	<cffunction name="getController" access="private" output="false" returntype="mof.AbstractController">
		<cfargument name="controller" type="string" required="true" />
		<cfreturn super.getController(argumentCollection=arguments) />
	</cffunction>	
	
	<cffunction name="initializeSession" access="private" output="false" returntype="void">
		<cfset super.initializeSession() />
		<cfreturn />
	</cffunction>	
	
	<cffunction name="runPreEventPlugins" access="public" output="false" returntype="void">
		<cfset super.runPreEventPlugins() />
		<cfreturn />
	</cffunction>

	<cffunction name="runPostEventPlugins" access="public" output="false" returntype="void">
		<cfset super.runPostEventPlugins() />
		<cfreturn />
	</cffunction>
	
	<!--- 
	#############################################################################
	METHODS RELATED TO EVENT ARGS
	#############################################################################--->
	<cffunction name="setArg" access="public" output="false" returntype="void">
		<cfargument name="name" type="string" required="true" />
		<cfargument name="value" type="any" required="true" />
		<cfset super.setArg(argumentCollection=arguments) />
		<cfreturn />
	</cffunction>
	
	<cffunction name="getArg" access="public" output="false" returntype="any">
		<cfargument name="name" type="string" required="true" />
		<cfreturn super.getArg(argumentCollection=arguments) />
	</cffunction>
	
	<cffunction name="getArgs" access="public" output="false" returntype="struct">
		<cfreturn super.getArgs() />
	</cffunction>

	<cffunction name="isArgDefined" access="public" output="false" returntype="boolean">
		<cfargument name="name" type="string" required="true" />
		<cfreturn super.isArgDefined(argumentCollection=arguments) />
	</cffunction>


	
	<!--- 
	#############################################################################
	VIEW STACK METHODS
	#############################################################################--->
	<cffunction name="initViewStack" access="private" output="false" returntype="void">
		<cfargument name="stack" type="string" required="false" default="#getAppKey()#_body_content">
		<cfset super.initViewStack(argumentCollection=arguments) />
		<cfreturn />
	</cffunction>
	
	<cffunction name="appendViewStack" access="private" output="false" returntype="void">
		<cfargument name="content" type="string" required="true" />
		<cfargument name="stack" type="string" required="false" default="#getAppKey()#_body_content">
		<cfset super.appendViewStack(argumentCollection=arguments) />
		<cfreturn />
	</cffunction>
	
	<cffunction name="getViewStack" access="private" output="false" returntype="string">
		<cfargument name="stack" type="string" required="false" default="#getAppKey()#_body_content">
		<cfreturn super.getViewStack(argumentCollection=arguments) />
	</cffunction>
	
	
	<!--- 
	#############################################################################
	VIEW METHODS
	#############################################################################--->
	<cffunction name="buildView" access="private" output="false" returntype="string" hint="I load a view and return its contents">
		<cfargument name="view" type="string" required="true" />
		<cfreturn super.buildView(argumentCollection=arguments) />
	</cffunction>
	
	
	<!---
	#################################################################################
	LAYOUT FUNCTIONS
	##################################################################################--->
	<cffunction name="initializeLayout" access="public" output="false" returntype="void">
		<cfset super.initializeLayout() />
		<cfreturn />
	</cffunction>
	
	<cffunction name="setLayout" access="public" output="false" returntype="void">
		<cfargument name="layout" type="string" required="true" />
		<cfreturn super.setLayout(argumentCollection=arguments) />
	</cffunction>
	
	<cffunction name="getLayout" access="public" output="false" returntype="string">
		<cfreturn super.getLayout() />
	</cffunction>
	
	<cffunction name="doLayout" access="public" output="true" returntype="void">
		<cfset super.doLayout() />
		<cfreturn />
	</cffunction>
	
	
	
	<!--- 
	#############################################################################
	REDIRECT FUNCTIONALITY
	#############################################################################--->
	<cffunction name="setPersistArgs" access="private" output="false" returntype="void">
		<cfargument name="args" type="struct" required="true" />
		<cfset super.setPersistArgs(argumentCollection=arguments) />
		<cfreturn />
	</cffunction>
	
	<cffunction name="getPersistArgs" access="private" output="false" returntype="struct">
		<cfreturn super.getPersistArgs() />
	</cffunction>
	
	<cffunction name="injectPersistArgs" access="private" output="false" returntype="void">
		<cfset super.injectPersistArgs() />
		<cfreturn />
	</cffunction>
	
	<cffunction name="redirect" access="public" output="false" returntype="void">
		<cfargument name="controller" type="string" required="true" />
		<cfargument name="handler" type="string" required="false" default="" />
		<cfargument name="persist" type="boolean" required="false" default="true" />
		<cfargument name="args" required="false" default="StructNew()" />
	
		<cfset super.redirect(argumentCollection=arguments) />
		<cfreturn />
	</cffunction>	


	
	
	<cffunction name="buildUrl" access="public" output="false" returntype="string">
		<cfargument name="controller" type="string" required="true" />
		<cfargument name="handler" type="string" required="false" default="" />
		<cfreturn super.buildUrl(argumentCollection=arguments) />
	</cffunction>
</cfcomponent>